<?php

//*************************取出题库分组的信息,规则，评语*********************/
// 只传入题库的id
function get_qn_info($sid){
	global $TABLE_C;
	$temp_result = array();
	$cmd = "select * from {$TABLE_C}vote_series where forid=$sid";
	$rsqng = mysql_query($cmd);
	while ($row = mysql_fetch_assoc($rsqng)) {
		$g_rule = explode('|',$row['rule']);//评级字符串，拆分成数组，看有几个评级
		$ruleArray = array(); //用来保存最终映射的评级和分数区间数组
		//遍历规则评级数量，A,B,C,D等等
		foreach ($g_rule as $key => $value) {
			$temp =  explode(':',$value);//拆分评级
			$level_str = $temp[0];//得到评级名：A或B那个意思
			$score_area = explode('-',$temp[1]); //把分数区间拆为数组
			sort($score_area);//排序
			$ruleArray[$level_str]= $score_area; //把数据装入最终映射用的数组
		}
		
		$temp_result[$row['id']] = Array(
			'name' => $row['name'],
			'rule' => $ruleArray,
			'evaluate' => array(
				'A'    => mb_substr(preg_replace('/\s+/isU','',$row['evaluate_a']),0,5000,'utf-8'),
				'B'    => mb_substr(preg_replace('/\s+/isU','',$row['evaluate_b']),0,5000,'utf-8')
			)
		);
	}
	// print_r( $temp_result);
	return $temp_result;
}

//*************************计算分数和评级，直接输出到前端处理************************//
//依赖于题库的分组信息数据 $qn_group_array
function get_qn_result_end($submitData,$qn_group_array){
	global $mydb;
	global $TABLE_C;
	global $score_map; //答案分数的映射数据
	$answer_group = explode(',',preg_replace('/s|_q\d+/is','',$submitData));//过滤掉只剩组的id和答案，用于处理
	$answer_group_key = array();    //保存
	$answer_group_result = array(); //用于保存最后输出前端的数组

	// 生成结果数组，以组id为key,初始分数为0
	foreach ($answer_group as $key => $value) {
		$t = explode(':',$value); //拆分数组，0是组id,1是中文答案
		// 先判断是否存在key（组id）,避免重复运行代码，因为一组答案中，有多个同组的答案
		if (!array_key_exists($t[0], $answer_group_result)) {
			$answer_group_key[] = $t[0];
			$answer_group_result[$t[0]] = array( "score" => 0,"subjectNum"=>0);//初始化分数,和该组的总题数
			// 同时写得到组的标题,并写入
			$qn_g_info = $mydb->fetch_assoc("select id,name from {$TABLE_C}vote_series where id={$t[0]} order by id");
			$g_title = $qn_g_info['name'];
			$answer_group_result[$t[0]]['name'] = $g_title;
		}
	}
	// print_r($answer_group);exit;
	// 遍历初始答案：统计总分，统计题目数（以实际提交的数据来计算）
	foreach ($answer_group as $key => $value) {
		// 累加分数
		$t = explode(':',$value); //拆分数组，0是组id,1是中文答案
		$score_ = $score_map[$t[1]]; //把中文答案，映射为分数
		$answer_group_result[$t[0]]['score'] += $score_; //对应的key的score值累加分数
		$answer_group_result[$t[0]]['subjectNum'] +=1; //统计题每个组id的题目数量
	}
	
	// print_r($answer_group_result);exit;
	// 计算该组的满分
	foreach ($answer_group_result as $key => $value) {
		$answer_group_result[$key]['score_full'] = $answer_group_result[$key]['subjectNum']* $score_map['是'];
	}
	
	// 映射计算评级，并取得相应的评语
	foreach ($answer_group_result as $key => $value) {
		$score_area  = $qn_group_array[$key]['rule'];        //取出组的评分规则
		$evaluate    = $qn_group_array[$key]['evaluate'];    //取出评语
		$group_score = $answer_group_result[$key]['score'];  //取出总分
		//映射评级，遍历评分规则，看在哪个区间，就反回key,(这里的key保存就是A/B/C/D)
		foreach ($score_area as $key_ => $value_) {
			if( $group_score>=$value_[0] && $group_score<=$value_[1]) {
				$answer_group_result[$key]['level'] = $key_; //直接返回key
			}
		}
		// 上面已经计算出评组了直接取出评语
		$mylevel = $answer_group_result[$key]['level'];
		$answer_group_result[$key]['evaluate'] = $evaluate[$mylevel];
	}
	// print_r( "【********************下面是最初答案数据****************】\n" );
	// print_r($answer_group);
	// print_r( "【********************组id的纯数组********************】\n" );
	// print_r($answer_group_key);
	// print_r( "【********************最终输出数组********************】\n" );
	// print_r($answer_group_result);
	return $answer_group_result;
}
?>